<?php

namespace App\Http\Middleware;

use Closure;

class CheckAdminLogin
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     * 
     */
    public function handle($request, Closure $next)
    {
        //在进入页面之前，判断有没有登陆过，使用中间件来进行判断
        //如果没有登录过，就跳转到登录页面
        //
        if (!auth()->check()) {
            return redirect(route('admin.login'))->withErrors(['error' => '请登录']);
        }


        //利用中间件控制页面是否有权限打开判断
        //访问的权限
        //获取当前用户所拥有的权限  -- 如果当前用户所拥有的权限是空的话 使用 array_filer进行过滤
        $auths = is_array(session('admin.auth')) ? array_filter(session('admin.auth')) : [];
        //将当前允许的权限得到之后，和公共访问权限进行合并   因为这些是不需要进行控制的
        $auths = array_merge($auths,config('rbac.allow_route'));
        //当前访问的路由
        $currentRoute = $request->route()->getName();
        
        //权限判断  如果是超级管理员的话 就会拥有所有的权限
        //达到用户访问页面的时候，判断是否有对应的权限
        if(auth()->user()->username != config('rbac.super') && !in_array($currentRoute,$auths)){
            exit('没有权限');
        }
        //当检测到用户的权限的时候给全局
        $request->auths = $auths;
        // dump($request);
        return $next($request);
    }
}
